//对axios函数库进行二次封装
//原因目的
//1.利用axios自带请求 和 响应拦截器
//2.利用请求拦截器,一般可以在请求头中携带的参数:如token
//3.响应拦截器,可以简化服务器返回的数据,处理http网络错误
import useUserStore from '@/store/user';
import axios from 'axios';
import { ElMessage } from 'element-plus';

//利用axios.create方法创建一个axios实例:可以设置axios基本路径,超时时间配置
const request = axios.create({
    baseURL: '/api',//请求的基本路径设置,
    timeout: 5000//超出5秒请求就会失败

})
//请求拦截器
request.interceptors.request.use((config) => {
    //获取用户仓库
    let userStore = useUserStore();
    //token:公共参数,如果用户登录了需要携带
    if (userStore.UserInfo.token) {
        config.headers.token = userStore.UserInfo.token;
    }
    //config是请求拦截器注入回调的对象,配置对象身上最重要的属性->headers
    //可以通过axios请求头携带公共参数-token
    return config
})
//响应拦截器
request.interceptors.response.use((response) => {
    //响应拦截器成功的回调,一般会进行简化数据
    return response.data;
}, (error) => {
    //处理http网络错误
    console.log(error);
    switch (error.response.status) {
        case 404:
            //错误提示信息
            ElMessage({
                type: 'error',
                message: '请求失败路径出现问题'
            })
            break;
        case 500 | 501 | 502 | 503 | 504 | 505:
            ElMessage({
                type: 'error',
                message: '服务器挂了'
            })
            break;
        case 401:
            ElMessage({
                type: 'error',
                message: '参数有误'
            })
            break;
    }
    return Promise.reject(new Error(error.message))
});
export default request